﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
//using System.Threading.Tasks;
using System.Windows.Forms;
using Grafica.ClienteWS;

namespace Grafica
{
    public partial class ABMEmpleado : Form
    {
        private static ABMEmpleado InstanciaFormulario = null;
        private string sexo;
        private List<DataEmpleado> listaEmpl;
    
        public ABMEmpleado()
        {
            InitializeComponent();
            this.dTPFechaBaja.Visible = false;
            this.lblDataExit.Visible = false;
            textBoxSalario.Enabled = false;
            textBoxComision.Enabled = false;
            CargarRoles();
            CargarEmpleados();
        }

        public void CargarRoles() {

            var dataSource = new List<string>();
            dataSource.Add("ADMINISTRADOR");
            dataSource.Add("SOCIO");
            dataSource.Add("TESORERO");
            dataSource.Add("");

            cbRol.DataSource = dataSource;
        }

        public void CargarEmpleados()
        {

            EtaxiSoapClient ws = new EtaxiSoapClient();
            DataConductor[] conductores = ws.ListarConductores();
            DataPersonal[] personal = ws.ListarPersonal();
            listaEmpl = new List<DataEmpleado>();

            if (conductores != null)
            {

                foreach (DataConductor conductor in conductores)
                {
                    listaEmpl.Add(conductor);
                }

            }

            if (personal != null)
            {

                foreach (DataPersonal per in personal)
                {
                    listaEmpl.Add(per);
                }
            }

            if (listaEmpl != null)
            {

                foreach (DataEmpleado empl in listaEmpl)
                {
                    this.dataGridView1.Rows.Add(empl.Ci, empl.Nombre, empl.Apellido);
                }
            }

            dataGridView1.Rows[0].Selected = true;

            cargarDatosEmpleado(0);
        }

        public void cargarDatosEmpleado(int posicion) {
            int pos = posicion;
            if(listaEmpl.Count != 0){
                foreach (DataEmpleado empl in listaEmpl)
                {
                    if (this.dataGridView1.Rows[pos].Cells[0].Value != null)
                    {
                        if (empl.Ci == this.dataGridView1.Rows[pos].Cells[0].Value.ToString())
                        {
                            this.textBoxCi.Enabled = false;
                            if (empl.EsActivo == true)
                            {
                                this.btnBaja.Enabled = true;
                                this.dTPFechaBaja.Enabled = true;
                                this.btnBaja.Text = "Pasar a inactivo";
                                btnBaja.Image = ((System.Drawing.Image)(Properties.Resources._1387510510_Stock_Index_Down));
                            }
                            else {
                                this.btnBaja.Enabled = true;
                                this.dTPFechaBaja.Enabled = true;
                                this.btnBaja.Text = "Pasar a activo";
                                btnBaja.Image = ((System.Drawing.Image)(Properties.Resources._1382246489_emblem_downloads_up));
                            }
                            this.tfName.Text = empl.Nombre;
                            this.tfApellido.Text = empl.Apellido;
                            this.textBoxCi.Text = empl.Ci;
                            this.tfDomicilio.Text = empl.Domicilio;
                            this.dTPFechaIng.Text = empl.FecAlta.ToString();
                            this.dTPFechaBaja.Text = empl.FecBaja.ToString();
                            this.dTNFechaNac.Text = empl.FecNac.ToString();
                            this.tfUsuario.Text = empl.Usuario;
                            this.tfContraseña.Text = empl.Password;
                            if (empl.Sexo.ToString() == "M")
                            {
                                this.rBtnMujer.Checked = true;
                            }
                            else
                            {
                                this.rBtnHombre.Checked = true;
                            }
                            if (empl.Rol == Roles.ADMINISTRADOR)
                            {
                                this.cbRol.Text = "ADMINISTRADOR";
                                this.textBoxComision.Enabled = false;
                                this.textBoxSalario.Enabled = true;
                                this.textBoxSalario.Text = empl.Sueldo.ToString();
                            }
                            else if (empl.Rol == Roles.SOCIO)
                            {
                                this.cbRol.Text = "SOCIO";
                                this.textBoxComision.Enabled = true;
                                this.textBoxSalario.Enabled = false;
                                this.textBoxComision.Text = empl.Sueldo.ToString();
                            }
                            else
                            {
                                this.cbRol.Text = "TESORERO";
                                this.textBoxComision.Enabled = false;
                                this.textBoxSalario.Enabled = true;
                                this.textBoxSalario.Text = empl.Sueldo.ToString();
                            }
                            this.tfTelefono.Text = empl.Telefono.ToString();
                        }
                    }
                }
            }
            else
            {
                this.cbRol.Text = "";
                this.rBtnHombre.Checked = false;
                this.rBtnMujer.Checked = false;
            }
        }

        public static ABMEmpleado Instance()
        {
            if (InstanciaFormulario == null)
            {
                InstanciaFormulario = new ABMEmpleado();
            }
            return InstanciaFormulario;
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);

            InstanciaFormulario = null;
        }

        private void btnAlta_Click(object sender, EventArgs e)
        {
            #region validacionCampos

            //valido nombre
            if (String.IsNullOrEmpty(tfName.Text))
            { 
                errorProvider1.SetError(tfName, "Debe ingresar el nombre.");
            }
            else
            {
                errorProvider1.SetError(tfName, String.Empty);
            }

            //valido apellido
            if (String.IsNullOrEmpty(tfApellido.Text))
            {
                errorProvider1.SetError(tfApellido, "Debe ingresar el apellido.");
            }
            else
            {
                errorProvider1.SetError(tfApellido, String.Empty);
            }

            //valido ci
            if (String.IsNullOrEmpty(textBoxCi.Text))
            {
                errorProvider1.SetError(textBoxCi, "Debe ingresar la ci.");
            }
            else
            {
                errorProvider1.SetError(textBoxCi, String.Empty);
            }
            
            //valido domicilio
            if (String.IsNullOrEmpty(tfDomicilio.Text))
            {
                errorProvider1.SetError(tfDomicilio, "Debe ingresar el domicilio.");
            }
            else
            {
                errorProvider1.SetError(tfDomicilio, String.Empty);
            }

            //valido sexo
            if ((!rBtnHombre.Checked) && (!rBtnMujer.Checked))
            {
                errorProvider1.SetError(rBtnHombre, "Debe seleccionar el sexo.");
                errorProvider1.SetError(rBtnMujer, "Debe seleccionar el sexo.");
            }
            else
            {
                errorProvider1.SetError(rBtnHombre, String.Empty);
                errorProvider1.SetError(rBtnMujer, String.Empty);
            }

            //valido rol
            if (String.IsNullOrEmpty(cbRol.Text))
            {
                errorProvider1.SetError(cbRol, "Debe seleccionar el rol.");
            }
            else
            {
                errorProvider1.SetError(cbRol, String.Empty);
            }

            //valido salario-administrador || tesorero
            if (((cbRol.Text == "ADMINISTRADOR") && (textBoxSalario.Text == String.Empty)) || ((cbRol.Text == "TESORERO") && (textBoxSalario.Text == String.Empty)))
            {
                errorProvider1.SetError(textBoxSalario, "Debe ingresar el salario.");
            }
            else
            {
                errorProvider1.SetError(textBoxSalario, String.Empty);
            }

            //valido comision-socio
            if ((cbRol.Text == "SOCIO") && (textBoxComision.Text == String.Empty))
            {
                errorProvider1.SetError(textBoxComision, "Debe ingresar la comisión.");
            }
            else
            {
                errorProvider1.SetError(textBoxComision, String.Empty);
            }

            //valido telefono
            if (String.IsNullOrEmpty(tfTelefono.Text))
            {
                errorProvider1.SetError(tfTelefono, "Debe ingresar el teléfono.");
            }
            else
            {
                errorProvider1.SetError(tfTelefono, String.Empty);
            }
                        
            //valido usuario        
            if (String.IsNullOrEmpty(tfUsuario.Text))
            {
                errorProvider1.SetError(tfUsuario, "Debe ingresar el usuario.");
            }
            else
            {
                errorProvider1.SetError(tfUsuario, String.Empty);
            }

            //valido contraseña
            if (String.IsNullOrEmpty(tfContraseña.Text))
            {
                errorProvider1.SetError(tfContraseña, "Debe ingresar la contraseña. [La misma debe ser cambiada por el usuario]");
            }
            else
            {
                errorProvider1.SetError(tfContraseña, String.Empty);
            }
        #endregion

            EtaxiSoapClient ws = new EtaxiSoapClient();

            if (rBtnHombre.Checked == true)
            {
                sexo = "H";
            }
            else
            {
                sexo = "M";
            }

            if (String.IsNullOrEmpty(textBoxComision.Text))
            {

                DataPersonal personal = new DataPersonal();

                personal.Nombre = tfName.Text;
                personal.Apellido = tfApellido.Text;
                personal.Ci = textBoxCi.Text;
                personal.Domicilio = tfDomicilio.Text;
                personal.EsActivo = true;
                personal.FecAlta = dTPFechaIng.Value;
                personal.FecBaja = dTPFechaBaja.Value;
                personal.FecNac = dTNFechaNac.Value;
                personal.Usuario = tfUsuario.Text;
                personal.Password = tfContraseña.Text;
                personal.Sexo = sexo;
                personal.Salario = (float)Convert.ToDouble(textBoxSalario.Text);
                personal.Telefono = Convert.ToInt32(tfTelefono.Text);
                if (cbRol.SelectedValue.ToString() == Roles.ADMINISTRADOR.ToString())
                {
                    personal.Rol = Roles.ADMINISTRADOR;
                }
                else
                {
                    personal.Rol = Roles.TESORERO;
                }

                ws.AltaEmpleado(null, null, personal);


            }
            else {
                DataConductor conductor = new DataConductor();

                conductor.Nombre = tfName.Text;
                conductor.Apellido = tfApellido.Text;
                conductor.Ci = textBoxCi.Text;
                conductor.Domicilio = tfDomicilio.Text;
                conductor.EsActivo = true;
                conductor.FecAlta = dTPFechaIng.Value;
                conductor.FecBaja = dTPFechaBaja.Value;
                conductor.FecNac = dTNFechaNac.Value;
                conductor.Usuario = tfUsuario.Text;
                conductor.Password = tfContraseña.Text;
                conductor.Sexo = sexo;
                conductor.Comision = (float)Convert.ToDouble(textBoxComision.Text);
                conductor.Telefono = Convert.ToInt32(tfTelefono.Text);
                conductor.Rol = Roles.SOCIO;

                ws.AltaEmpleado(null, conductor, null);
            }

        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            #region validacionCampos

            //valido nombre
            if (String.IsNullOrEmpty(tfName.Text))
            {
                errorProvider1.SetError(tfName, "Debe ingresar el nombre.");
            }
            else
            {
                errorProvider1.SetError(tfName, String.Empty);
            }

            //valido apellido
            if (String.IsNullOrEmpty(tfApellido.Text))
            {
                errorProvider1.SetError(tfApellido, "Debe ingresar el apellido.");
            }
            else
            {
                errorProvider1.SetError(tfApellido, String.Empty);
            }

            //valido ci
            if (String.IsNullOrEmpty(textBoxCi.Text))
            {
                errorProvider1.SetError(textBoxCi, "Debe ingresar la ci.");
            }
            else
            {
                errorProvider1.SetError(textBoxCi, String.Empty);
            }

            //valido domicilio
            if (String.IsNullOrEmpty(tfDomicilio.Text))
            {
                errorProvider1.SetError(tfDomicilio, "Debe ingresar el domicilio.");
            }
            else
            {
                errorProvider1.SetError(tfDomicilio, String.Empty);
            }

            //valido sexo
            if ((!rBtnHombre.Checked) && (!rBtnMujer.Checked))
            {
                errorProvider1.SetError(rBtnHombre, "Debe seleccionar el sexo.");
                errorProvider1.SetError(rBtnMujer, "Debe seleccionar el sexo.");
            }
            else
            {
                errorProvider1.SetError(rBtnHombre, String.Empty);
                errorProvider1.SetError(rBtnMujer, String.Empty);
            }

            //valido rol
            if (String.IsNullOrEmpty(cbRol.Text))
            {
                errorProvider1.SetError(cbRol, "Debe seleccionar el rol.");
            }
            else
            {
                errorProvider1.SetError(cbRol, String.Empty);
            }

            //valido salario-administrador || tesorero
            if (((cbRol.Text == "ADMINISTRADOR") && (textBoxSalario.Text == String.Empty)) || ((cbRol.Text == "TESORERO") && (textBoxSalario.Text == String.Empty)))
            {
                errorProvider1.SetError(textBoxSalario, "Debe ingresar el salario.");
            }
            else
            {
                errorProvider1.SetError(textBoxSalario, String.Empty);
            }

            //valido comision-socio
            if ((cbRol.Text == "SOCIO") && (textBoxComision.Text == String.Empty))
            {
                errorProvider1.SetError(textBoxComision, "Debe ingresar la comisión.");
            }
            else
            {
                errorProvider1.SetError(textBoxComision, String.Empty);
            }

            //valido telefono
            if (String.IsNullOrEmpty(tfTelefono.Text))
            {
                errorProvider1.SetError(tfTelefono, "Debe ingresar el teléfono.");
            }
            else
            {
                errorProvider1.SetError(tfTelefono, String.Empty);
            }

            //valido usuario        
            if (String.IsNullOrEmpty(tfUsuario.Text))
            {
                errorProvider1.SetError(tfUsuario, "Debe ingresar el usuario.");
            }
            else
            {
                errorProvider1.SetError(tfUsuario, String.Empty);
            }

            //valido contraseña
            if (String.IsNullOrEmpty(tfContraseña.Text))
            {
                errorProvider1.SetError(tfContraseña, "Debe ingresar la contraseña. [La misma debe ser cambiada por el usuario]");
            }
            else
            {
                errorProvider1.SetError(tfContraseña, String.Empty);
            }
            #endregion

            EtaxiSoapClient ws = new EtaxiSoapClient();

            if (rBtnHombre.Checked == true)
            {
                sexo = "H";
            }
            else
            {
                sexo = "M";
            }

            if (String.IsNullOrEmpty(textBoxComision.Text))
            {

                DataPersonal personal = new DataPersonal();

                personal.Nombre = tfName.Text;
                personal.Apellido = tfApellido.Text;
                personal.Ci = textBoxCi.Text;
                personal.Domicilio = tfDomicilio.Text;
                personal.EsActivo = true;
                personal.FecAlta = dTPFechaIng.Value;
                personal.FecBaja = dTPFechaBaja.Value;
                personal.FecNac = dTNFechaNac.Value;
                personal.Usuario = tfUsuario.Text;
                personal.Password = tfContraseña.Text;
                personal.Sexo = sexo;
                personal.Salario = (float)Convert.ToDouble(textBoxSalario.Text);
                personal.Telefono = Convert.ToInt32(tfTelefono.Text);
                if (cbRol.SelectedValue.ToString() == Roles.ADMINISTRADOR.ToString())
                {
                    personal.Rol = Roles.ADMINISTRADOR;
                }
                else
                {
                    personal.Rol = Roles.TESORERO;
                }

                ws.ModificarEmpleado(null, null, personal);


            }
            else {
                DataConductor conductor = new DataConductor();

                conductor.Nombre = tfName.Text;
                conductor.Apellido = tfApellido.Text;
                conductor.Ci = textBoxCi.Text;
                conductor.Domicilio = tfDomicilio.Text;
                conductor.EsActivo = true;
                conductor.FecAlta = dTPFechaIng.Value;
                conductor.FecBaja = dTPFechaBaja.Value;
                conductor.FecNac = dTNFechaNac.Value;
                conductor.Usuario = tfUsuario.Text;
                conductor.Password = tfContraseña.Text;
                conductor.Sexo = sexo;
                conductor.Comision = (float)Convert.ToDouble(textBoxComision.Text);
                conductor.Telefono = Convert.ToInt32(tfTelefono.Text);
                conductor.Rol = Roles.SOCIO;

                ws.ModificarEmpleado(null, conductor, null);
            }
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void cbRol_TextChanged(object sender, EventArgs e)
        {

            switch (cbRol.Text)
            { 
            
                case "ADMINISTRADOR":
                    textBoxSalario.Enabled = true;
                    textBoxComision.Text = String.Empty;
                    textBoxComision.Enabled = false;
                    break;
                case "TESORERO":
                    textBoxSalario.Enabled = true;
                    textBoxComision.Text = String.Empty;
                    textBoxComision.Enabled = false;
                    break;
                case "SOCIO":
                    textBoxSalario.Enabled = false;
                    textBoxSalario.Text = String.Empty;
                    textBoxComision.Enabled = true;
                    break;
                default:
                    textBoxComision.Text = String.Empty;
                    textBoxSalario.Text = String.Empty;
                    textBoxSalario.Enabled = false;
                    textBoxComision.Enabled = false;
                    break;
            }
        }

        private void tfName_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarLetrasNumeros.ControlarLetras(e);
        }

        private void tfApellido_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarLetrasNumeros.ControlarLetras(e);
        }

        private void tfTelefono_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarLetrasNumeros.ControlarNumeros(e);
        }

        private void textBoxComision_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarLetrasNumeros.ControlarNumeros(e);
        }

        private void textBoxSalario_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarLetrasNumeros.ControlarNumeros(e);
        }

        private void textBoxCi_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarLetrasNumeros.ControlarNumeros(e);
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            
        }

        private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            
            int row = dataGridView1.CurrentCell.RowIndex;
            cargarDatosEmpleado(row);
            


        }

        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Clear();
            CargarEmpleados();
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            this.textBoxCi.Enabled = true;
            this.btnBaja.Enabled = false;
            this.dTPFechaBaja.Enabled = false;
            this.btnBaja.Text = "Pasar a inactivo";

            btnBaja.Image = ((System.Drawing.Image)(Properties.Resources._1387510510_Stock_Index_Down));

            this.tfName.Text = String.Empty;
            this.tfApellido.Text = String.Empty;
            this.textBoxCi.Text = String.Empty;
            this.tfDomicilio.Text = String.Empty;
            this.dTPFechaIng.Text = String.Empty;
            this.dTPFechaBaja.Text = String.Empty;
            this.dTNFechaNac.Text = String.Empty;
            this.tfUsuario.Text = String.Empty;
            this.tfContraseña.Text = String.Empty;
            this.rBtnMujer.Checked = false;
            this.rBtnHombre.Checked = false;
            this.cbRol.Text = "";
            this.tfTelefono.Text = String.Empty;
        }

        private void btnBaja_Click(object sender, EventArgs e)
        {
            EtaxiSoapClient ws = new EtaxiSoapClient();
            if (this.btnBaja.Text == "Pasar a inactivo")
            {
                btnBaja.Image = ((System.Drawing.Image)(Properties.Resources._1382246489_emblem_downloads_up));
                ws.CambiarEstadoEmpleado(this.textBoxCi.Text, false);
            }
            else {
                ws.CambiarEstadoEmpleado(this.textBoxCi.Text, true);
            }
            
        }   


    }
}
